package com.opesoft.pf.page;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * <h1>用于控制列表页面状态的类</h1>
 * <p>
 * Title: Platform
 * </p>
 * <p>
 * Description: MIS Platform for Handlewell
 * </p>
 * <p>
 * Copyright: Copyright (c) 2004
 * </p>
 * <p>
 * Company: Handlewell
 * </p>
 * 
 * @author Larlf.Wang
 * @version 1.0
 */
public class ListCtrl implements Serializable
{
	// 页面控制部分
	private int allRecord=0; // 所有记录数
	private int nowPage=1; // 当前页数
	private int pageSize=100; // 每页记录数目

	// 数据流程及查寻控制部分

	/**
	 * 返回共有多少页
	 * 
	 * @return int
	 */
	public int getAllPage()
	{
		if(this.pageSize>0)
		{
			return (this.allRecord+this.pageSize-1)/this.pageSize;
		}
		else
		{
			return 1;
		}
	}

	/**
	 * 返回当前页，进行了边界检查
	 * 
	 * @return int
	 */
	public int getNowPage()
	{
		if(nowPage<1) return 1;
		else if(nowPage>this.getAllPage())
		{
			this.nowPage=this.getAllPage();
			return this.getAllPage();
		}
		else return nowPage;
	}

	/**
	 * 返回上一页
	 */
	public void back()
	{
		this.setNowPage(this.nowPage-1);
	}

	/**
	 * 进入下一页
	 */
	public void next()
	{
		this.setNowPage(this.nowPage+1);
	}

	/**
	 * 设置当前的页面
	 * 
	 * @param nowPage
	 *            int
	 */
	public void setNowPage(int nowPage)
	{
		if(nowPage<1) this.nowPage=1;
		else if(nowPage>this.getAllPage()) this.nowPage=this.getAllPage();
		else this.nowPage=nowPage;
	}

	/**
	 * 取得一页上显示多少条记录
	 * 
	 * @return int
	 */
	public int getPageSize()
	{
		return pageSize;
	}

	/**
	 * 设置一页显示多少条记录
	 * <p>
	 * 同时会根据第一条记录的所在位置改变当前页
	 * 
	 * @param pageSize
	 *            int
	 */
	public void setPageSize(int pageSize)
	{
		// 如果页面显示的记录数改变的话应该转到第几页(以第一条记录为准)
		if(pageSize!=this.pageSize)
		{
			if(pageSize>0&&this.pageSize>0)
			{
				this.setNowPage(((this.getNowPage()-1)*this.pageSize+1)/pageSize+1);
			}
			else
			{
				this.setNowPage(1);
			}
		}
		this.pageSize=pageSize;
	}

	public ListCtrl()
	{}

	/**
	 * 取得总记录数
	 * 
	 * @return int
	 */
	public int getAllRecord()
	{
		return allRecord;
	}

	/**
	 * 设置总记录数
	 * 
	 * @param allRecord
	 *            int
	 */
	public void setAllRecord(int allRecord)
	{
		this.allRecord=allRecord;
	}

	/**
	 * 得到开始记录在总记录中的位置(百分比)
	 * 
	 * @return int
	 */
	public int getStartPercent()
	{
		if(this.getAllRecord()>0)
			return (this.getPageSize()*(this.getNowPage()-1))*100/this.getAllRecord();
		else
			return 0;
	}

	/**
	 * 得到结束记录在总记录中的位置(百分比)
	 * 
	 * @return int
	 */
	public int getEndPercent()
	{
		int endRecord=this.getAllRecord();
		if(this.getPageSize()!=0) endRecord=this.getPageSize()*(this.getNowPage());  //如果PageSize为零，认为是显示全部
		if(endRecord>this.getAllRecord()) endRecord=this.getAllRecord();

		if(this.getAllRecord()>0)
			return endRecord*100/this.getAllRecord();
		else
			return 100;
	}

	public Map<String, Integer> toMap()
	{
		Map<String, Integer> map=new HashMap<String, Integer>();

		map.put("allRecord",this.getAllRecord());
		map.put("allPage",this.getAllPage());
		map.put("nowPage",this.getNowPage());
		map.put("pageSize",this.getPageSize());
		map.put("startPercent",this.getStartPercent());
		map.put("endPercent",this.getEndPercent());

		return map;
	}
}
